if (!require("pacman")) install.packages("pacman")
library(pacman)
# p_load(imager, seewave, tidyverse, knitr, patchwork)
p_load(imager, wavethresh, ggplot2, dplyr)
image_1_path <- file.path("fotos", "1.JPG")
image_1_original_cimg <- load.image(image_1_path)
image_1_fixed_cimg <- drop(image_1_original_cimg)
set.seed(123)
noise_std_dev <- 0.5
image_1_array <- as.array(image_1_fixed_cimg)
channels_original <- lapply(1:3, function(i) as.vector(image_1_array[, , i]))
noise <- lapply(channels_original, function(channel) rnorm(length(channel), mean = 0, sd = noise_std_dev))
channels_noisy <- Map(function(channel, n) pmax(0, pmin(1, channel + n)), channels_original, noise)
image_1_noisy_cimg <- as.cimg(
array(
unlist(channels_noisy),
dim = c(dim(image_1_fixed_cimg)[1:2], 1, 3)
)
)
par(mfrow = c(1, 2))
plot(as.cimg(image_1_original_cimg), main = "Original")
plot(image_1_noisy_cimg, main = "Noisy")
par(mfrow = c(1, 1))

library(imager)
# Load and prepare the image
image_2_path <- file.path("fotos", "2.JPG")
image_2_original_cimg <- load.image(image_2_path)
image_2_fixed_cimg <- drop(image_2_original_cimg)
# Convert image to array for manipulation
image_2_array <- as.array(image_2_fixed_cimg)
# Set noise parameters
frequency <- 50 # Frequency of sinusoidal noise
amplitude <- 0.2 # Amplitude of noise
# Generate sinusoidal noise for each channel
height <- dim(image_2_array)[1]
width <- dim(image_2_array)[2]
channels_original <- lapply(1:3, function(i) as.vector(image_2_array[, , i]))
noise <- lapply(channels_original, function(channel) {
x <- seq(0, 2 * pi, length.out = width)
y <- seq(0, 2 * pi, length.out = height)
noise_grid <- outer(sin(x * frequency), sin(y * frequency))
noise_vector <- as.vector(noise_grid) * amplitude
noise_vector
})
# Add noise to each channel and clip values to [0, 1]
channels_noisy <- Map(function(channel, n) pmax(0, pmin(1, channel + n)), channels_original, noise)
# Reconstruct the noisy image
image_2_noisy_cimg <- as.cimg(
array(
unlist(channels_noisy),
dim = c(dim(image_1_fixed_cimg)[1:2], 1, 3)
)
)
# Plot the results
par(mfrow = c(1, 2))
plot(as.cimg(image_2_original_cimg), main = "Original")
plot(image_2_noisy_cimg, main = "Sinusoidal High-Frequency Noise")
par(mfrow = c(1, 1))

LS0tCnRpdGxlOiAiZ2VuZXJhY2nDs24gZGlzdGludG9zIHRpcG9zIGRlIHJ1aWRvIgphdXRob3I6ICJJbGlhIFpoaWdhcmV2IgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCBkZSAlQiBkZSAlWSwgJUg6JU0nKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6ICcyJwogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAyCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA3MgotLS0KCmBgYHtyfQppZiAoIXJlcXVpcmUoInBhY21hbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKQpsaWJyYXJ5KHBhY21hbikKIyBwX2xvYWQoaW1hZ2VyLCBzZWV3YXZlLCB0aWR5dmVyc2UsIGtuaXRyLCBwYXRjaHdvcmspCnBfbG9hZChpbWFnZXIsIHdhdmV0aHJlc2gsIGdncGxvdDIsIGRwbHlyKQpgYGAKCmBgYHtyfQppbWFnZV8xX3BhdGggPC0gZmlsZS5wYXRoKCJmb3RvcyIsICIxLkpQRyIpCmltYWdlXzFfb3JpZ2luYWxfY2ltZyA8LSBsb2FkLmltYWdlKGltYWdlXzFfcGF0aCkKaW1hZ2VfMV9maXhlZF9jaW1nIDwtIGRyb3AoaW1hZ2VfMV9vcmlnaW5hbF9jaW1nKQoKc2V0LnNlZWQoMTIzKQpub2lzZV9zdGRfZGV2IDwtIDAuNQppbWFnZV8xX2FycmF5IDwtIGFzLmFycmF5KGltYWdlXzFfZml4ZWRfY2ltZykKCmNoYW5uZWxzX29yaWdpbmFsIDwtIGxhcHBseSgxOjMsIGZ1bmN0aW9uKGkpIGFzLnZlY3RvcihpbWFnZV8xX2FycmF5WywgLCBpXSkpCm5vaXNlIDwtIGxhcHBseShjaGFubmVsc19vcmlnaW5hbCwgZnVuY3Rpb24oY2hhbm5lbCkgcm5vcm0obGVuZ3RoKGNoYW5uZWwpLCBtZWFuID0gMCwgc2QgPSBub2lzZV9zdGRfZGV2KSkKY2hhbm5lbHNfbm9pc3kgPC0gTWFwKGZ1bmN0aW9uKGNoYW5uZWwsIG4pIHBtYXgoMCwgcG1pbigxLCBjaGFubmVsICsgbikpLCBjaGFubmVsc19vcmlnaW5hbCwgbm9pc2UpCgppbWFnZV8xX25vaXN5X2NpbWcgPC0gYXMuY2ltZygKICBhcnJheSgKICAgIHVubGlzdChjaGFubmVsc19ub2lzeSksCiAgICBkaW0gPSBjKGRpbShpbWFnZV8xX2ZpeGVkX2NpbWcpWzE6Ml0sIDEsIDMpCiAgKQopCgpwYXIobWZyb3cgPSBjKDEsIDIpKQpwbG90KGFzLmNpbWcoaW1hZ2VfMV9vcmlnaW5hbF9jaW1nKSwgbWFpbiA9ICJPcmlnaW5hbCIpCnBsb3QoaW1hZ2VfMV9ub2lzeV9jaW1nLCBtYWluID0gIk5vaXN5IikKcGFyKG1mcm93ID0gYygxLCAxKSkKCmBgYAoKCmBgYHtyfQpsaWJyYXJ5KGltYWdlcikKCiMgTG9hZCBhbmQgcHJlcGFyZSB0aGUgaW1hZ2UKaW1hZ2VfMl9wYXRoIDwtIGZpbGUucGF0aCgiZm90b3MiLCAiMi5KUEciKQppbWFnZV8yX29yaWdpbmFsX2NpbWcgPC0gbG9hZC5pbWFnZShpbWFnZV8yX3BhdGgpCmltYWdlXzJfZml4ZWRfY2ltZyA8LSBkcm9wKGltYWdlXzJfb3JpZ2luYWxfY2ltZykKCiMgQ29udmVydCBpbWFnZSB0byBhcnJheSBmb3IgbWFuaXB1bGF0aW9uCmltYWdlXzJfYXJyYXkgPC0gYXMuYXJyYXkoaW1hZ2VfMl9maXhlZF9jaW1nKQoKIyBTZXQgbm9pc2UgcGFyYW1ldGVycwpmcmVxdWVuY3kgPC0gNTAgICMgRnJlcXVlbmN5IG9mIHNpbnVzb2lkYWwgbm9pc2UKYW1wbGl0dWRlIDwtIDAuMiAgIyBBbXBsaXR1ZGUgb2Ygbm9pc2UKCiMgR2VuZXJhdGUgc2ludXNvaWRhbCBub2lzZSBmb3IgZWFjaCBjaGFubmVsCmhlaWdodCA8LSBkaW0oaW1hZ2VfMl9hcnJheSlbMV0Kd2lkdGggPC0gZGltKGltYWdlXzJfYXJyYXkpWzJdCgpjaGFubmVsc19vcmlnaW5hbCA8LSBsYXBwbHkoMTozLCBmdW5jdGlvbihpKSBhcy52ZWN0b3IoaW1hZ2VfMl9hcnJheVssICwgaV0pKQpub2lzZSA8LSBsYXBwbHkoY2hhbm5lbHNfb3JpZ2luYWwsIGZ1bmN0aW9uKGNoYW5uZWwpIHsKICB4IDwtIHNlcSgwLCAyICogcGksIGxlbmd0aC5vdXQgPSB3aWR0aCkKICB5IDwtIHNlcSgwLCAyICogcGksIGxlbmd0aC5vdXQgPSBoZWlnaHQpCiAgbm9pc2VfZ3JpZCA8LSBvdXRlcihzaW4oeCAqIGZyZXF1ZW5jeSksIHNpbih5ICogZnJlcXVlbmN5KSkKICBub2lzZV92ZWN0b3IgPC0gYXMudmVjdG9yKG5vaXNlX2dyaWQpICogYW1wbGl0dWRlCiAgbm9pc2VfdmVjdG9yCn0pCgojIEFkZCBub2lzZSB0byBlYWNoIGNoYW5uZWwgYW5kIGNsaXAgdmFsdWVzIHRvIFswLCAxXQpjaGFubmVsc19ub2lzeSA8LSBNYXAoZnVuY3Rpb24oY2hhbm5lbCwgbikgcG1heCgwLCBwbWluKDEsIGNoYW5uZWwgKyBuKSksIGNoYW5uZWxzX29yaWdpbmFsLCBub2lzZSkKCiMgUmVjb25zdHJ1Y3QgdGhlIG5vaXN5IGltYWdlCmltYWdlXzJfbm9pc3lfY2ltZyA8LSBhcy5jaW1nKAogIGFycmF5KAogICAgdW5saXN0KGNoYW5uZWxzX25vaXN5KSwKICAgIGRpbSA9IGMoZGltKGltYWdlXzFfZml4ZWRfY2ltZylbMToyXSwgMSwgMykKICApCikKCiMgUGxvdCB0aGUgcmVzdWx0cwpwYXIobWZyb3cgPSBjKDEsIDIpKQpwbG90KGFzLmNpbWcoaW1hZ2VfMl9vcmlnaW5hbF9jaW1nKSwgbWFpbiA9ICJPcmlnaW5hbCIpCnBsb3QoaW1hZ2VfMl9ub2lzeV9jaW1nLCBtYWluID0gIlNpbnVzb2lkYWwgSGlnaC1GcmVxdWVuY3kgTm9pc2UiKQpwYXIobWZyb3cgPSBjKDEsIDEpKQoKYGBgCgo=